import instance from '../utils/http';

export const reqGetOrderDetail = (orderId) => {
    console.log('[API] 请求订单详情，订单ID:', orderId);
    
    // 参数验证
    if (!orderId || isNaN(orderId) || orderId <= 0) {
        console.error('[API] 无效的订单ID:', orderId);
        return Promise.reject(new Error('订单ID必须为正整数'));
    }
    
    return instance.get(`/orderdetail/${orderId}`)
        .then(response => {
            console.log('[API] 收到订单详情响应:', response);
            
            // 1. 检查HTTP状态码（兼容status和statusCode）
            const statusCode = response.status || response.statusCode;
            if (statusCode < 200 || statusCode >= 300) {
                console.error('[API] HTTP状态码错误:', statusCode);
                const error = new Error(`HTTP错误: ${statusCode}`);
                error.response = response;
                throw error;
            }
            
            // 2. 检查响应数据结构（后端可能直接返回订单数据，而非{code, data}结构）
            if (!response.data || typeof response.data !== 'object') {
                console.error('[API] 无效的响应格式:', response.data);
                throw new Error('无效的响应格式');
            }
            
            // 3. 适配后端实际响应格式：
            //    情况A：后端返回{code, message, data}结构（标准格式）
            //    情况B：后端直接返回订单数据（无code字段，如日志中的响应）
            let orderData;
            if (response.data.code !== undefined) {
                // 情况A：按标准格式处理
                if (response.data.code !== 200) {
                    throw new Error(response.data.message || '获取订单详情失败');
                }
                orderData = response.data.data; // 从data字段取订单数据
            } else {
                // 情况B：直接将响应数据作为订单数据（兼容当前后端格式）
                orderData = response.data;
            }
            
            // 4. 验证订单数据和cakesList
            if (!orderData || typeof orderData !== 'object') {
                throw new Error('订单数据格式错误');
            }
            if (!Array.isArray(orderData.cakesList)) {
                console.warn('[API] 自动补全cakesList为空数组');
                orderData.cakesList = [];
            }
            
            // 5. 返回标准化数据
            return {
                code: 200,
                message: 'success',
                data: orderData
            };
        })
        .catch(error => {
            console.error('[API] 请求订单详情出错:', error);
            
            // 修正错误归类：只有完全无响应时才视为网络错误
            if (!error.response) {
                return Promise.reject(new Error('网络连接失败，请检查网络设置'));
            }
            
            // 其他错误（业务错误、格式错误等）直接返回具体信息
            const errorMsg = error.message || '获取订单详情失败';
            return Promise.reject(new Error(errorMsg));
        });
};